package com.shelpe.services.lexicon.service.price;

public interface WordPricingRule<T, M, C> {
	/**
	 * generate the performance - the 1st step
	 * @param mode
	 * @param recommend
	 * @param context
	 * @return
	 */
	int performace(T word, M metric, C context);
	/**
	 * generate the performance price ratio - the 2nd step
	 * @param mode
	 * @param recommend
	 * @param context
	 * @return
	 */
	int pqr(T word, M metric, C context);
	/**
	 * 
	 * @param mode
	 * @param recommend
	 * @param context
	 * @return
	 */
	int similarity(T word, M metric, C context);
	/**
	 * generate the score - the 3rd step
	 * @param mode
	 * @param recommend
	 * @param context
	 * @return
	 */
	int score(T word, M metric, C context);
	/**
	 * generate the price - the 4th step
	 * @param mode
	 * @param recommend
	 * @param context
	 * @return
	 */
	int price(T recommend, M metric, C context);
	
	public static interface WordPricable{
		void setPerformance(int perf);
		int getPerformance();
		
		void setSimilarity(int similarity);
		int getSimilarity();
		
		void setPqr(int pqr);
		int getPqr();
		
		void setScore(int score);
		int getScore();
		
		void setPrice(int price);
		int getPrice();
	}
	
}
